<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
	<meta name="keywords" content="Seata" />
	<meta name="description" content="Seata 参数配置 0.9.0版本。" />
	<!-- 网页标签标题 -->
	<title>Seata 参数配置 0.9.0版本</title>
  <link rel="shortcut icon" href="/img/seata_logo_small.jpeg"/>
	<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
	<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="/img/seata_logo.png"/></a><div class="search search-normal"><span class="icon-search"></span></div><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what-is-seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/developers/developers_dev.html" target="_self">开发者</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/download.html" target="_self">下载</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>概述</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/overview/what-is-seata.html" target="_self">Seata 是什么？</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/overview/faq.html" target="_self">FAQ</a></li></ul></li><li class="menu-item menu-item-level-1"><span>用户文档</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/quickstart.html" target="_self">快速启动</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/saga.html" target="_self">Saga 模式</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/configurations.html" target="_self">参数配置</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/transaction-group.html" target="_self">事务分组介绍</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/spring.html" target="_self">Spring 支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/api.html" target="_self">API 支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/microservice.html" target="_self">微服务框架支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/ormframework.html" target="_self">ORM 框架支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li class="menu-item menu-item-level-1"><span>开发者指南</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>各事务模式<img style="transform:rotate(-90deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/dev/mode/at-mode.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/dev/mode/tcc-mode.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/dev/mode/saga-mode.html" target="_self">Seata Saga 模式</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/dev/seata-mertics.html" target="_self">Metrics设计</a></li></ul></li><li class="menu-item menu-item-level-1"><span>运维指南</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">Metrics配置</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>部署<img style="transform:rotate(-90deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-guide-beginner.html" target="_self">新人文档</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-server.html" target="_self">直接部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-by-docker.html" target="_self">Docker部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-by-kubernetes.html" target="_self">Kubernetes部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-by-helm.html" target="_self">Helm 部署</a></li></ul></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>seata参数配置 0.9.0版本</h1>
<h3>公共部分</h3>
<table>
<thead>
<tr>
<th>key</th>
<th>desc</th>
<th>remark</th>
</tr>
</thead>
<tbody>
<tr>
<td>transport.serialization</td>
<td>client和server通信编解码方式</td>
<td>seata、protobuf</td>
</tr>
<tr>
<td>transport.heartbeat</td>
<td>client和server通信心跳检测开关</td>
<td>默认true开启</td>
</tr>
</tbody>
</table>
<h3>server端</h3>
<table>
<thead>
<tr>
<th>key</th>
<th>desc</th>
<th>remark</th>
</tr>
</thead>
<tbody>
<tr>
<td>transaction.undo.log.save.days</td>
<td>undo保留天数</td>
<td>默认7天,log_status=1（附录3）和未正常清理的undo</td>
</tr>
<tr>
<td>transaction.undo.log.delete.period</td>
<td>undo清理线程间隔时间</td>
<td>默认86400000，单位毫秒</td>
</tr>
<tr>
<td>service.max.commit.retry.timeout</td>
<td>二阶段提交重试超时时长</td>
<td>单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试。公式: timeout&gt;=now-globalTransactionBeginTime,true表示超时则不再重试</td>
</tr>
<tr>
<td>service.max.rollback.retry.timeout</td>
<td>二阶段回滚重试超时时长</td>
<td>同commit</td>
</tr>
<tr>
<td>recovery.committing-retry-period</td>
<td>二阶段提交未完成状态全局事务重试提交线程间隔时间</td>
<td>默认1000，单位毫秒</td>
</tr>
<tr>
<td>recovery.asyn-committing-retry-period</td>
<td>二阶段异步提交状态重试提交线程间隔时间</td>
<td>默认1000，单位毫秒</td>
</tr>
<tr>
<td>recovery.rollbacking-retry-period</td>
<td>二阶段回滚状态重试回滚线程间隔时间</td>
<td>默认1000，单位毫秒</td>
</tr>
<tr>
<td>recovery.timeout-retry-period</td>
<td>超时状态检测重试线程间隔时间</td>
<td>默认1000，单位毫秒，检测出超时将全局事务置入回滚会话管理器</td>
</tr>
<tr>
<td>store.mode</td>
<td>事务会话信息存储方式</td>
<td>file本地文件(不支持HA)，db数据库(支持HA)</td>
</tr>
<tr>
<td>store.file.dir</td>
<td>file模式文件存储文件夹名</td>
<td>默认sessionStore</td>
</tr>
<tr>
<td>store.db.datasource</td>
<td>db模式数据源类型</td>
<td>默认dbcp</td>
</tr>
<tr>
<td>store.db.db-type</td>
<td>db模式数据库类型</td>
<td>默认mysql</td>
</tr>
<tr>
<td>store.db.driver-class-name</td>
<td>db模式数据库驱动</td>
<td>默认com.mysql.jdbc.Driver</td>
</tr>
<tr>
<td>store.db.url</td>
<td>db模式数据源库url</td>
<td>默认jdbc:mysql://127.0.0.1:3306/seata</td>
</tr>
<tr>
<td>store.db.user</td>
<td>db模式数据库账户</td>
<td>默认mysql</td>
</tr>
<tr>
<td>store.db.min-conn</td>
<td>db模式数据库初始连接数</td>
<td>默认1</td>
</tr>
<tr>
<td>store.db.max-conn</td>
<td>db模式数据库最大连接数</td>
<td>默认3</td>
</tr>
<tr>
<td>store.db.global.table</td>
<td>db模式全局事务表名</td>
<td>默认global_table</td>
</tr>
<tr>
<td>store.db.branch.table</td>
<td>db模式分支事务表名</td>
<td>默认branch_table</td>
</tr>
<tr>
<td>store.db.lock-table</td>
<td>db模式全局锁表名</td>
<td>默认lock_table</td>
</tr>
<tr>
<td>store.db.query-limit</td>
<td>db模式查询全局事务一次的最大条数</td>
<td>默认1000</td>
</tr>
<tr>
<td>metrics.enabled</td>
<td>是否启用Metrics</td>
<td>默认false关闭，在False状态下，所有与Metrics相关的组件将不会被初始化，使得性能损耗最低</td>
</tr>
<tr>
<td>metrics.registry-type</td>
<td>指标注册器类型</td>
<td>Metrics使用的指标注册器类型，默认为内置的compact（简易）实现，这个实现中的Meter仅使用有限内存计数，性能高足够满足大多数场景；目前只能设置一个指标注册器实现</td>
</tr>
<tr>
<td>metrics.exporter-list</td>
<td>指标结果Measurement数据输出器列表</td>
<td>默认prometheus，多个输出器使用英文逗号分割，例如&quot;prometheus,jmx&quot;，目前仅实现了对接prometheus的输出器</td>
</tr>
<tr>
<td>metrics.exporter-prometheus-port</td>
<td>prometheus输出器Client端口号</td>
<td>默认9898</td>
</tr>
</tbody>
</table>
<h3>client端</h3>
<table>
<thead>
<tr>
<th>key</th>
<th>role</th>
<th>desc</th>
<th>remark</th>
</tr>
</thead>
<tbody>
<tr>
<td>service.vgroup_mapping.my_test_tx_group</td>
<td>TM,RM</td>
<td>事务群组（附录1）</td>
<td>my_test_tx_group为分组，配置项值为TC集群名</td>
</tr>
<tr>
<td>service.default.grouplist</td>
<td>TM,RM</td>
<td>TC服务列表（附录2）</td>
<td>仅注册中心为file时使用</td>
</tr>
<tr>
<td>service.disableGlobalTransaction</td>
<td>TM,RM</td>
<td>全局事务开关</td>
<td>默认false。false为开启，true为关闭</td>
</tr>
<tr>
<td>service.enableDegrade</td>
<td>TM</td>
<td>降级开关（待实现）</td>
<td>默认false。业务侧根据连续错误数自动降级不走seata事务</td>
</tr>
<tr>
<td>client.async.commit.buffer.limit</td>
<td>RM</td>
<td>异步提交缓存队列长度</td>
<td>默认10000。 二阶段提交成功，RM异步清理undo队列</td>
</tr>
<tr>
<td>client.lock.retry.internal</td>
<td>RM</td>
<td>校验或占用全局锁重试间隔</td>
<td>默认10，单位毫秒</td>
</tr>
<tr>
<td>client.lock.retry.times</td>
<td>RM</td>
<td>校验或占用全局锁重试次数</td>
<td>默认30</td>
</tr>
<tr>
<td>client.lock.retry.policy.branch-rollback-on-conflict</td>
<td>RM</td>
<td>分支事务与其它全局回滚事务冲突时锁策略</td>
<td>默认true，优先释放本地锁让回滚成功</td>
</tr>
<tr>
<td>client.report.retry.count</td>
<td>TM,RM</td>
<td>一阶段结果上报TC重试次数</td>
<td>默认5次</td>
</tr>
<tr>
<td>client.tm.commit.retry.count</td>
<td>TM</td>
<td>一阶段全局提交结果上报TC重试次数</td>
<td>默认1次，建议大于1</td>
</tr>
<tr>
<td>client.tm.rollback.retry.count</td>
<td>TM</td>
<td>一阶段全局回滚结果上报TC重试次数</td>
<td>默认1次，建议大于1</td>
</tr>
<tr>
<td>client.table.meta.check.enable</td>
<td>RM</td>
<td>自动刷新缓存中的表结构</td>
<td>默认true</td>
</tr>
<tr>
<td>transaction.undo.data.validation</td>
<td>RM</td>
<td>二阶段回滚镜像校验</td>
<td>默认true开启，false关闭</td>
</tr>
<tr>
<td>transaction.undo.log.serialization</td>
<td>RM</td>
<td>undo序列化方式</td>
<td>默认jackson</td>
</tr>
<tr>
<td>transaction.undo.log.table</td>
<td>RM</td>
<td>自定义undo表名</td>
<td>默认undo_log</td>
</tr>
<tr>
<td>support.spring.datasource.autoproxy</td>
<td>RM</td>
<td>数据源自动代理开关</td>
<td>默认false关闭</td>
</tr>
</tbody>
</table>
<h3>未使用</h3>
<table>
<thead>
<tr>
<th>key</th>
<th>desc</th>
<th>remark</th>
</tr>
</thead>
<tbody>
<tr>
<td>lock.mode</td>
<td>锁存储方式</td>
<td>local、remote</td>
</tr>
<tr>
<td>lock.local</td>
<td></td>
<td></td>
</tr>
<tr>
<td>lock.remote</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h3>附录1：</h3>
<pre><code>事务分组说明。
1.事务分组是什么？
事务分组是seata的资源逻辑，类似于服务实例。在file.conf中的my_test_tx_group就是一个事务分组。
2.通过事务分组如何找到后端集群？
首先程序中配置了事务分组（GlobalTransactionScanner 构造方法的txServiceGroup参数），程序会通过用户配置的配置中心去寻找service.vgroup_mapping.事务分组配置项，取得配置项的值就是TC集群的名称。拿到集群名称程序通过一定的前后缀+集群名称去构造服务名，各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表，获得后端真实的TC服务列表。
3.为什么这么设计，不直接取服务名？
这里多了一层获取事务分组到映射集群的配置。这样设计后，事务分组可以作为资源的逻辑隔离单位，当发生故障时可以快速failover。
</code></pre>
<h3>附录2：</h3>
<pre><code>关于grouplist问题说明下。
1. 什么时候会用到file.conf中的default.grouplist？
当registry.type=file时会用到，其他时候不读。
2. default.grouplist的值列表是否可以配置多个？
可以配置多个，配置多个意味着集群，但当store.mode=file时，会报错。原因是在file存储模式下未提供本地文件的同步，所以需要使用store.mode=db，通过db来共享TC集群间数据
3. 是否推荐使用default.grouplist？
不推荐，如问题1，当registry.type=file时会用到，也就是说这里用的不是真正的注册中心，不具体服务的健康检查机制当tc不可用时无法自动剔除列表，推荐使用nacos 、eureka、redis、zk、consul、etcd3、sofa。registry.type=file或config.type=file 设计的初衷是让用户再不依赖第三方注册中心或配置中心的前提下，通过直连的方式，快速验证seata服务。    
</code></pre>
<h3>附录3：</h3>
<pre><code>log_status=1的是防御性的，是收到全局回滚请求，但是不确定某个事务分支的本地事务是否已经执行完成了，这时事先插入一条branchid相同的数据，插入的假数据成功了，本地事务继续执行就会报主键冲突自动回滚。
假如插入不成功说明表里有数据这个本地事务已经执行完成了，那么取出这条undolog数据做反向回滚操作。</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="/img/seata_logo_gray.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案，致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what-is-seata.html" target="_self">Seata 是什么？</a></dd><dd><a href="/zh-cn/docs/user/quickstart.html" target="_self">快速开始</a></dd><dd><a href="https://github.com/seata/seata.github.io/issues/new" target="_self">报告文档问题</a></dd><dd><a href="https://github.com/seata/seata.github.io" target="_self">在Github上编辑此文档</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
	<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
	<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
	<script>
		window.rootPath = '';
  </script>
	<script src="/build/documentation.js"></script>
	<script>
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?104e73ef0c18b416b27abb23757ed8ee";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
    </script>
</body>
</html>
